﻿//ICandleManagerContainer.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Candles
{
	using System;
	using System.Collections.Generic;

	using Ecng.ComponentModel;

	/// <summary>
	/// Интерфейс контейнера, хранящего данные свечек.
	/// </summary>
	public interface ICandleManagerContainer
	{
		/// <summary>
		/// Время хранения свечек в памяти. По-умолчанию равно 2-ум дням.
		/// </summary>
		/// <remarks>Если значение установлено в <see cref="TimeSpan.Zero"/>, то свечки не будут удаляться.</remarks>
		TimeSpan CandlesKeepTime { get; set; }

		/// <summary>
		/// Известить контейнер для начале получения свечек для серии.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="from">Начальная дата, с которой будут получаться свечки.</param>
		/// <param name="to">Конечная дата, до которой будут получаться свечки.</param>
		void Start(CandleSeries series, DateTime from, DateTime to);

		/// <summary>
		/// Добавить свечку для серии.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="candle">Свечка.</param>
		/// <returns>True, если свечка не ранее добавлена, иначе, false.</returns>
		bool AddCandle(CandleSeries series, Candle candle);

		/// <summary>
		/// Получить для серии все ассоциированные с ней свечки на период <paramref name="time"/>.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="time">Период свечки.</param>
		/// <returns>Свечки.</returns>
		IEnumerable<Candle> GetCandles(CandleSeries series, DateTime time);

		/// <summary>
		/// Получить для серии все ассоциированные с ней свечки.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <returns>Свечки.</returns>
		IEnumerable<Candle> GetCandles(CandleSeries series);

		/// <summary>
		/// Получить свечку по индексу.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="candleIndex">Порядковый номер свечки с конца.</param>
		/// <returns>Найденая свечка. Если свечки не существует, то будет возвращено null.</returns>
		Candle GetCandle(CandleSeries series, int candleIndex);

		/// <summary>
		/// Получить свечки по серии и диапазону дат.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="timeRange">Диапазон дат, в которые должны входить свечки. Учитывается значение <see cref="Candle.OpenTime"/>.</param>
		/// <returns>Найденные свечки.</returns>
		IEnumerable<Candle> GetCandles(CandleSeries series, Range<DateTime> timeRange);

		/// <summary>
		/// Получить свечки по серии и общему количеству.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <param name="candleCount">Количество свечек, которое необходимо вернуть.</param>
		/// <returns>Найденные свечки.</returns>
		IEnumerable<Candle> GetCandles(CandleSeries series, int candleCount);

		/// <summary>
		/// Получить количество свечек.
		/// </summary>
		/// <param name="series">Серия свечек.</param>
		/// <returns>Количество свечек.</returns>
		int GetCandleCount(CandleSeries series);
	}
}